#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
高级权限维持模块使用示例
演示如何使用新增的五个高级权限维持模块
"""

import os
import sys
import time
import json
from datetime import datetime

# 添加项目根目录到路径
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)

from modules.persistence.modular_manager import ModularPersistenceManager
from modules.persistence.base import PersistenceConfig, PersistenceLevel
from core.utils import color_green, color_red, color_yellow, color_blue


def print_banner():
    """打印横幅"""
    banner = """
╔══════════════════════════════════════════════════════════════╗
║                高级权限维持模块演示程序                        ║
║                Advanced Persistence Modules Demo              ║
╚══════════════════════════════════════════════════════════════╝
    """
    color_blue(banner)


def demo_module_discovery():
    """演示模块发现功能"""
    color_green("\n=== 1. 模块发现演示 ===")
    
    manager = ModularPersistenceManager()
    modules = manager.list_available_modules()
    
    print(f"发现 {len(modules)} 个可用模块:")
    for name, info in modules.items():
        status = "✓" if name in manager.modules else "✗"
        print(f"  {status} {name}: {info.get('description', 'N/A')}")
        print(f"    版本: {info.get('version', 'N/A')}")
        print(f"    平台: {', '.join(info.get('supported_platforms', []))}")
        print(f"    需要root: {'是' if info.get('requires_root', False) else '否'}")
        print()
    
    return manager


def demo_single_module_deployment(manager):
    """演示单个模块部署"""
    color_green("\n=== 2. 单个模块部署演示 ===")
    
    # 选择一个可用的模块进行演示
    available_modules = list(manager.list_available_modules().keys())
    
    if not available_modules:
        color_red("没有可用的模块进行演示")
        return
    
    # 优先选择不需要特殊环境的模块
    demo_module = None
    for module_name in ['privilege_escalation', 'ld_preload', 'fileless_memory']:
        if module_name in available_modules:
            demo_module = module_name
            break
    
    if not demo_module:
        demo_module = available_modules[0]
    
    color_yellow(f"演示模块: {demo_module}")
    
    # 创建配置
    config = {
        'stealth_level': 7,
        'auto_repair': True,
        'monitoring': False  # 演示时关闭监控
    }
    
    # 创建实例
    print("正在创建模块实例...")
    instance_id = manager.create_instance(demo_module, config=config)
    
    if instance_id:
        color_green(f"✓ 实例创建成功: {instance_id}")
        
        # 获取实例信息
        instance_info = manager.get_instance_info(instance_id)
        if instance_info:
            print("实例信息:")
            for key, value in instance_info.items():
                print(f"  {key}: {value}")
        
        # 模拟部署（在演示环境中不实际部署）
        print("\n注意: 在演示环境中，不会实际部署模块以避免安全风险")
        color_yellow("在生产环境中，可以使用以下代码部署:")
        print("  success = manager.deploy_instance(instance_id)")
        
        # 清理实例
        print("\n正在清理演示实例...")
        manager.remove_instance(instance_id)
        color_green("✓ 实例清理完成")
        
    else:
        color_red("✗ 实例创建失败")


def demo_batch_deployment(manager):
    """演示批量部署"""
    color_green("\n=== 3. 批量部署演示 ===")
    
    print("批量部署配置:")
    config = {
        'stealth_level': 8,
        'enable_monitoring': False,  # 演示时关闭
        'auto_repair': True,
        'deployment_strategy': 'conservative'  # 保守策略
    }
    
    print(json.dumps(config, indent=2, ensure_ascii=False))
    
    print("\n注意: 在演示环境中，不会实际执行批量部署")
    color_yellow("在生产环境中，可以使用以下代码:")
    print("  deployed = manager.deploy_comprehensive_persistence(config)")
    print("  print('已部署的实例:', deployed)")


def demo_monitoring_and_status(manager):
    """演示监控和状态功能"""
    color_green("\n=== 4. 监控和状态演示 ===")
    
    # 获取状态摘要
    print("系统状态摘要:")
    status = manager.get_status_summary()
    for key, value in status.items():
        print(f"  {key}: {value}")
    
    # 列出所有实例
    print("\n当前实例列表:")
    instances = manager.list_instances()
    if instances:
        for instance_id, info in instances.items():
            print(f"  {instance_id}: {info.get('status', 'unknown')}")
    else:
        print("  当前没有活跃的实例")
    
    # 演示监控功能
    print("\n监控功能演示:")
    color_yellow("在生产环境中，可以启动后台监控:")
    print("  manager.start_monitoring()  # 启动监控")
    print("  time.sleep(60)              # 运行一段时间")
    print("  health = manager.check_all_instances()  # 检查健康状态")
    print("  manager.stop_monitoring()   # 停止监控")


def demo_module_specific_features():
    """演示各模块特定功能"""
    color_green("\n=== 5. 模块特定功能演示 ===")
    
    modules_features = {
        'ld_preload': {
            'description': 'LD_PRELOAD 进程隐藏',
            'features': [
                '系统调用劫持',
                '进程隐藏',
                '文件隐藏',
                '网络连接隐藏'
            ],
            'config_example': {
                'library_path': '/tmp/.hidden_lib.so',
                'target_functions': ['readdir', 'stat', 'open'],
                'hidden_processes': ['backdoor'],
                'hidden_files': ['.hidden']
            }
        },
        'fileless_memory': {
            'description': '内存级无文件权限维持',
            'features': [
                'memfd_create 技术',
                '无文件执行',
                '内存映射',
                '动态代码注入'
            ],
            'config_example': {
                'payload_size': 4096,
                'execution_method': 'memfd_create',
                'persistence_interval': 300
            }
        },
        'privilege_escalation': {
            'description': '权限降级-升级联动机制',
            'features': [
                '动态权限切换',
                '智能检测规避',
                '最小权限原则',
                '自适应权限管理'
            ],
            'config_example': {
                'escalation_triggers': ['network_activity', 'file_access'],
                'downgrade_timeout': 600,
                'stealth_mode': True
            }
        },
        'systemd_advanced': {
            'description': '高级 systemd 服务伪装',
            'features': [
                '服务名称伪装',
                '启动参数混淆',
                '依赖关系伪造',
                '日志混淆'
            ],
            'config_example': {
                'service_name': 'system-update-daemon',
                'service_description': 'System Update Service',
                'start_command': '/usr/bin/system-updater',
                'dependencies': ['network.target']
            }
        },
        'pam_hijack': {
            'description': 'PAM 模块劫持权限维持',
            'features': [
                'PAM 模块替换',
                '认证流程劫持',
                '密码窃取',
                '登录触发后门'
            ],
            'config_example': {
                'target_services': ['sshd', 'login', 'sudo'],
                'backup_original': True,
                'stealth_logging': True
            }
        }
    }
    
    for module_name, info in modules_features.items():
        print(f"\n{module_name.upper()} 模块:")
        print(f"  描述: {info['description']}")
        print("  主要功能:")
        for feature in info['features']:
            print(f"    • {feature}")
        print("  配置示例:")
        print(json.dumps(info['config_example'], indent=4, ensure_ascii=False))


def demo_security_considerations():
    """演示安全注意事项"""
    color_green("\n=== 6. 安全注意事项 ===")
    
    considerations = [
        "权限要求: 大部分模块需要 root 权限",
        "平台兼容性: 主要支持 Linux 系统",
        "检测规避: 建议配合其他反检测技术使用",
        "清理机制: 使用后及时清理痕迹",
        "合法使用: 仅用于授权的安全测试",
        "监控告警: 注意系统监控和告警机制",
        "日志清理: 及时清理相关日志记录",
        "网络流量: 注意网络流量特征分析"
    ]
    
    print("重要安全注意事项:")
    for i, consideration in enumerate(considerations, 1):
        print(f"  {i}. {consideration}")
    
    color_yellow("\n⚠️  警告: 这些工具仅用于授权的安全测试和研究目的")
    color_yellow("⚠️  未经授权使用这些工具可能违反法律法规")


def main():
    """主函数"""
    print_banner()
    
    try:
        # 1. 模块发现演示
        manager = demo_module_discovery()
        
        # 2. 单个模块部署演示
        demo_single_module_deployment(manager)
        
        # 3. 批量部署演示
        demo_batch_deployment(manager)
        
        # 4. 监控和状态演示
        demo_monitoring_and_status(manager)
        
        # 5. 模块特定功能演示
        demo_module_specific_features()
        
        # 6. 安全注意事项
        demo_security_considerations()
        
        color_green("\n=== 演示完成 ===")
        print("更多详细信息请参考:")
        print("  - docs/ADVANCED_PERSISTENCE_MODULES.md")
        print("  - 各模块的源代码和注释")
        
    except KeyboardInterrupt:
        color_yellow("\n演示被用户中断")
    except Exception as e:
        color_red(f"\n演示过程中发生错误: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    main()